﻿using System;
using System.Collections.Generic;

namespace ICRprojekt
{
    /// <summary>
    /// Klasa sadrži podatke za jedno pitanje. 
    /// </summary>
    public class Pitanje
    {
        private readonly KategorijaPitanja _kategorija;
        private readonly int _indeks;

        private readonly string _prvo_pitanje;
        private readonly List<string> _prvo_odgovori;
        private readonly string _prvo_tocan_odgovor;

        private readonly string _drugo_pitanje;
        private readonly string _drugi_odgovor;

        private int _broj_otvaranja;

        /// <summary>
        /// Prazan konstruktor
        /// </summary>
        public Pitanje()
        {
        }

        /// <summary>
        /// Konstruktor
        /// </summary>
        /// <param name="kategorija">Kategorija kojoj pripada pitanje.</param>
        /// <param name="indeks">Indeks pitanja</param>
        /// <param name="prvo_pitanje">Prvo pitanje.</param>
        /// <param name="prvo_odgovori">Lista odgovora na prvo pitanje.</param>
        /// <param name="prvo_tocan_odgovor">Točan odgovor na prvo pitanje.</param>
        /// <param name="drugo_pitanje">Drugo pitanje.</param>
        /// <param name="drugi_odgovor">Točan odgovor na drugo pitanje.</param>
        public Pitanje(KategorijaPitanja kategorija, int indeks,
                        string prvo_pitanje, List<string> prvo_odgovori, string prvo_tocan_odgovor,
                        string drugo_pitanje, string drugi_odgovor)
        {
            _kategorija = kategorija;
            _indeks = indeks;

            _prvo_pitanje = prvo_pitanje;
            _prvo_odgovori = prvo_odgovori;
            _prvo_tocan_odgovor = prvo_tocan_odgovor;

            _drugo_pitanje = drugo_pitanje;
            _drugi_odgovor = drugi_odgovor;

            _broj_otvaranja = 0;
        }

        /*METODE*/
        public void OtvoriPitanje()
        {
            _broj_otvaranja++;
        }

        /// <summary>
        /// Određuje se broj bodova za regularna pitanja.
        /// </summary>
        /// <param name="prvo"></param>
        /// <returns></returns>
        public uint OdrediBrojBodova(bool prvo)
        {
            uint novi_bodovi;
            if (prvo)
            {
                novi_bodovi = 100;
                // kaznjavanje sa -20%
                novi_bodovi = (uint) ( novi_bodovi * ( 1 - Math.Min( (BrojOtvaranja-1) * 0.2, 1 ) ) );
                // ispravak kako se nebi dobivali bodovi za svako tocno odgovaranje na prvo pitanje
                if (BrojOtvaranja > 1) novi_bodovi = 0;
            }
            else
            {
                novi_bodovi = 200;
                novi_bodovi = (uint) ( novi_bodovi * ( 1 - Math.Min( (BrojOtvaranja-1) * 0.2, 1 ) ) );
            }
            return novi_bodovi;
        }

        /// <summary>
        /// Broj bodova za jackpot.
        /// </summary>
        /// <param name="trenutni_bodovi">Trenutni bodovi</param>
        /// <returns>novi bodovi</returns>
        public uint OdrediBrojBodovaJackpot(uint trenutni_bodovi)
        {
            var random = new Random( );
            // trenutni bodovi se mnoze sa random faktorom izmedju 1.0 i 2.0
            return (uint) ( trenutni_bodovi * ( 1 + random.NextDouble( ) ) );
        }

        /* PROPERTIES */

        /// <summary>
        /// Prvo pitanje
        /// </summary>
        public string PrvoPitanje
        {
            get { return _prvo_pitanje; }
        }

        /// <summary>
        /// Tocan odgovor na prvo pitanje.
        /// </summary>
        public string PrvoTocan
        {
            get { return _prvo_tocan_odgovor; }
        }

        /// <summary>
        /// Ponudjeni odgovori za prvo pitanje.
        /// </summary>
        public List<string> PrvoOdgovori
        {
            get { return _prvo_odgovori; }
        }

        /// <summary>
        /// Kategorija pitanja
        /// </summary>
        public KategorijaPitanja Kategorija
        {
            get { return _kategorija; }
        }

        /// <summary>
        /// Indeks pitanja
        /// </summary>
        public int Indeks
        {
            get { return _indeks; }
        }

        /// <summary>
        /// Drugo pitanje.
        /// </summary>
        public string DrugoPitanje
        {
            get { return _drugo_pitanje; }
        }

        /// <summary>
        /// Tocan odgovor na drugo pitanje.
        /// </summary>
        public string DrugoOdgovor
        {
            get { return _drugi_odgovor; }
        }

        /// <summary>
        /// Broj otvaranja pitanja.
        /// </summary>
        public int BrojOtvaranja
        {
            get { return _broj_otvaranja; }
            set { _broj_otvaranja = value; }
        }

        /// <summary>
        /// #DINO
        /// Probni ispis pitanja (!jackpot)
        /// </summary>
        public string TestIspis1()
        {
            string izlaz = "";
            izlaz += this.PrvoPitanje + "\n";
            izlaz += "1.) " + this.PrvoOdgovori[0] + "\n";
            izlaz += "2.) " + this.PrvoOdgovori[1] + "\n";
            izlaz += "3.) " + this.PrvoOdgovori[2] + "\n";
            return izlaz;
        }

        /// <summary>
        /// #DINO
        /// Probni ispis pitanja (jackpot)
        /// </summary>
        public string TestIspis2()
        {
            string izlaz = "";
            izlaz += this.DrugoPitanje + "\n";
            izlaz += "0.) " + this.DrugoOdgovor + "\n";
            return izlaz;
        }
    }
}
